<template>
	<div class="wrapper">

		<!-- header部分 -->
		<header>
			<p>确认订单</p>
		</header>

		<!-- 订单信息部分 -->
		<div class="order-info">
			<h5>订单配送至：</h5>
			<div class="order-info-address" @click="toUserAddress">
				<p>{{deliveryaddress!=null?deliveryaddress.address:'请选择送货地址'}}</p>
				<i class="fa fa-angle-right"></i>
			</div>
			<p>{{deliveryaddress?.contactName || user.userName}}{{deliveryaddress?.contactSex | sexFilter}} {{deliveryaddress?.contactTel || user.userId}}</p>
		</div>

		<h3>{{business.businessName}}</h3>

		<!-- 订单明细部分 -->
		<ul class="order-detailed">
			<li v-for="item in cartArr" :key="item.id">
				<div class="order-detailed-left">
					<img :src="item.food.foodImg" alt="商品图片">
					<p>{{item.food.foodName}} x {{item.quantity}}</p>
				</div>
				<p>&#165;{{(item.food.foodPrice * item.quantity).toFixed(2)}}</p>
			</li>
		</ul>
		<div class="order-deliveryfee">
			<p>配送费</p>
			<p>&#165;{{business.deliveryPrice}}</p>
		</div>

		<!-- 合计部分 -->
		<div class="total">
			<div class="total-left">
				&#165;{{totalPrice.toFixed(2)}}
			</div>
			<div class="total-right" @click="toPayment">
				去支付
			</div>
		</div>
	</div>
</template>

<script>
	export default{
		name:'Orders',
		data(){
			return {
				businessId: this.$route.query.businessId,
				business:{},
				user:{},
				cartArr:[],
				deliveryaddress: null,
				selectedAddressId: null
			}
		},
		created() {
			this.user = this.$getLocalStorage('user') || {};
			this.loadBusinessInfo();
			this.loadCartItems();
			this.loadUserAddresses();
		},
		computed:{
			totalPrice(){
				let totalPrice = 0;
				for(let cartItem of this.cartArr){
					totalPrice += cartItem.food.foodPrice * cartItem.quantity;
				}
				totalPrice += this.business.deliveryPrice || 0;
				return totalPrice;
			}
		},
		filters:{
			sexFilter(value){
				return value === 1 || value === '1' ? '先生' : '女士';
			}
		},
		methods:{
			// 加载商家信息
			loadBusinessInfo() {
				this.$axios.get(`/api/businesses/${this.businessId}`)
					.then(response => {
						if (response.data.success) {
							this.business = response.data.data;
						} else {
							alert('获取商家信息失败: ' + (response.data.message || '未知错误'));
						}
					})
					.catch(error => {
						console.error('获取商家信息出错:', error);
						alert('网络错误，无法获取商家信息: ' + (error.response?.status || ''));
					});
			},
			
			// 加载购物车商品
			loadCartItems() {
				if (!this.user.id) {
					alert('请先登录');
					this.$router.push('/login');
					return;
				}
				
				const headers = {
					'Authorization': `Bearer ${this.user.token || ''}`
				};
				
				this.$axios.get(`/api/carts`, { 
					params: {
						userId: this.user.id,
						businessId: this.businessId
					},
					headers 
				})
				.then(response => {
					if (response.data.success) {
						this.cartArr = response.data.data;
						console.log('购物车商品加载成功:', this.cartArr);
					} else {
						alert('获取购物车信息失败: ' + (response.data.message || '未知错误'));
					}
				})
				.catch(error => {
					console.error('获取购物车信息出错:', error);
					if (error.response?.status === 401) {
						this.$removeLocalStorage('user');
						alert('登录已失效，请重新登录');
						this.$router.push('/login');
					} else {
						alert('网络错误，无法获取购物车信息: ' + (error.response?.status || ''));
					}
				});
			},
			
			// 加载用户地址列表
			loadUserAddresses() {
				if (!this.user.id) return;
				
				const headers = {
					'Authorization': `Bearer ${this.user.token || ''}`
				};
				
				this.$axios.get(`/api/addresses`, { 
					params: { userId: this.user.id },
					headers 
				})
				.then(response => {
					if (response.data.success && response.data.data.length > 0) {
						this.deliveryaddress = response.data.data[0];
						this.selectedAddressId = this.deliveryaddress.id;
					}
				})
				.catch(error => {
					console.error('获取地址列表出错:', error);
				});
			},
			
			toUserAddress(){
				this.$router.push({
					path: '/userAddress',
					query: { 
						businessId: this.businessId,
						selectedAddressId: this.selectedAddressId
					}
				});
			},
			
			toPayment(){
				if(!this.deliveryaddress){
					alert('请选择送货地址！');
					return;
				}
				
				if(this.cartArr.length === 0){
					alert('购物车为空，无法创建订单！');
					return;
				}
				
				// 构建符合最新接口规范的订单数据，严格控制嵌套层级
				const orderData = {
					// 基础信息：仅保留必要字段，移除可能导致深层嵌套的系统字段
					deleted: false,
					orderTotal: this.totalPrice,
					orderDate: new Date().toISOString(),
					orderState: 0,
					status: "PENDING_PAYMENT", // 使用后端枚举值
					orderStateDisplay: "string", // 按接口要求保留字符串类型
					
					// 客户信息：仅传递ID和必要字段，避免深层嵌套
					customer: {
						id: this.user.id || 0,
						username: this.user.username || "string",
						// 移除authorities数组以减少嵌套
					},
					
					// 商家信息：仅传递ID和必要字段
					business: {
						id: this.businessId || 0,
						userId: this.business.userId || 0, // 新增商家用户ID字段
						businessName: this.business.businessName || "string"
						// 移除businessOwner等可能导致深层嵌套的对象
					},
					
					// 配送地址：精简结构
					deliveryAddress: {
						id: this.deliveryaddress.id || 0,
						contactName: this.deliveryaddress.contactName || "string",
						contactSex: this.deliveryaddress.contactSex || 0,
						contactTel: this.deliveryaddress.contactTel || "string",
						address: this.deliveryaddress.address || "string",
						isDefault: this.deliveryaddress.isDefault || true,
						// 移除customer对象以避免循环引用和深层嵌套
					},
					
					// 订单明细：最大限度减少嵌套
					orderDetailets: this.cartArr.map(cartItem => ({
						deleted: false,
						food: {
							id: cartItem.food.id || 0,
							foodName: cartItem.food.foodName || "string",
							foodPrice: cartItem.food.foodPrice || 0,
							// 移除business对象以减少嵌套层级
						},
						quantity: cartItem.quantity || 0,
						itemPrice: cartItem.food.foodPrice || 0,
						// 移除order字段避免嵌套问题
					}))
				};
				
				console.log('准备创建订单，发送数据:', orderData);
				
				const headers = {
					'Content-Type': 'application/json',
					'Authorization': `Bearer ${this.user.token || ''}`
				};
				
				this.$axios.post('/api/orders', orderData, { headers })
					.then(response => {
						console.log('创建订单响应:', response.data);
						
						if (response.data.success && response.data.data) {
							// 创建订单成功后清空购物车
							this.clearCartAfterOrder();
							
							let orderId = response.data.data.id;
							this.$router.push({
								path: '/payment',
								query: { orderId: orderId }
							});
						} else {
							alert('创建订单失败！' + (response.data.message || ''));
						}
					})
					.catch(error => {
						console.error('创建订单出错:', error);
						if (error.response?.data) {
							console.error('错误详情:', error.response.data);
						}
						
						if (error.response?.status === 401) {
							this.$removeLocalStorage('user');
							alert('登录已失效，请重新登录');
							this.$router.push('/login');
						} else {
							alert('网络错误，无法创建订单: ' + (error.response?.status || ''));
						}
					});
			},
			
			// 订单创建成功后清空购物车
			clearCartAfterOrder() {
				const headers = {
					'Authorization': `Bearer ${this.user.token || ''}`
				};
				
				// 批量删除当前商家的购物车项
				this.cartArr.forEach(item => {
					this.$axios.delete(`/api/carts/${item.id}`, { headers })
						.then(() => {
							console.log(`购物车项 ${item.id} 已删除`);
						})
						.catch(error => {
							console.error(`删除购物车项 ${item.id} 失败:`, error);
						});
				});
			}
		}
	}
</script>
    

<style scoped>
	/****************** 总容器 ******************/
	.wrapper {
		width: 100%;
		height: 100%;
	}

	/****************** header部分 ******************/
	.wrapper header {
		width: 100%;
		height: 12vw;
		background-color: #0097FF;
		color: #fff;
		font-size: 4.8vw;

		position: fixed;
		left: 0;
		top: 0;
		z-index: 1000;

		display: flex;
		justify-content: center;
		align-items: center;
	}

	/****************** 订单信息部分 ******************/
	.wrapper .order-info {
		/*注意这里，不设置高，靠内容撑开。因为地址有可能折行*/
		width: 100%;
		margin-top: 12vw;
		background-color: #0097EF;
		box-sizing: border-box;
		padding: 2vw;
		color: #fff;
	}

	.wrapper .order-info h5 {
		font-size: 3vw;
		font-weight: 300;
	}

	.wrapper .order-info .order-info-address {
		width: 100%;
		display: flex;
		justify-content: space-between;
		align-items: center;

		font-weight: 700;
		user-select: none;
		cursor: pointer;
		margin: 1vw 0;
	}

	.wrapper .order-info .order-info-address p {
		width: 90%;
		font-size: 5vw;
	}

	.wrapper .order-info .order-info-address i {
		font-size: 6vw;
	}

	.wrapper .order-info p {
		font-size: 3vw;
	}

	.wrapper h3 {
		box-sizing: border-box;
		padding: 3vw;
		font-size: 4vw;
		color: #666;
		border-bottom: solid 1px #DDD;
	}

	/****************** 订单明细部分 ******************/
	.wrapper .order-detailed {
		width: 100%;
	}

	.wrapper .order-detailed li {
		width: 100%;
		height: 16vw;
		box-sizing: border-box;
		padding: 3vw;
		color: #666;

		display: flex;
		justify-content: space-between;
		align-items: center;
	}

	.wrapper .order-detailed li .order-detailed-left {
		display: flex;
		align-items: center;
	}

	.wrapper .order-detailed li .order-detailed-left img {
		width: 10vw;
		height: 10vw;
	}

	.wrapper .order-detailed li .order-detailed-left p {
		font-size: 3.5vw;
		margin-left: 3vw;
	}

	.wrapper .order-detailed li p {
		font-size: 3.5vw;
	}

	.wrapper .order-deliveryfee {
		width: 100%;
		height: 16vw;
		box-sizing: border-box;
		padding: 3vw;
		color: #666;
		display: flex;
		justify-content: space-between;
		align-items: center;
		font-size: 3.5vw;
	}

	/****************** 订单合计部分 ******************/
	.wrapper .total {
		width: 100%;
		height: 14vw;

		position: fixed;
		left: 0;
		bottom: 0;

		display: flex;
	}

	.wrapper .total .total-left {
		flex: 2;
		background-color: #505051;
		color: #fff;
		font-size: 4.5vw;
		font-weight: 700;
		user-select: none;

		display: flex;
		justify-content: center;
		align-items: center;
	}

	.wrapper .total .total-right {
		flex: 1;
		background-color: #38CA73;
		color: #fff;
		font-size: 4.5vw;
		font-weight: 700;
		user-select: none;
		cursor: pointer;

		display: flex;
		justify-content: center;
		align-items: center;
	}
</style>
